package com.dingding.facde.coupon;

import java.util.List;

import com.dingding.common.core.beans.District;
import com.dingding.facde.activity.dto.CouponStoreDTO;
import com.dingding.facde.activity.dto.ExpiredCouponDTO;
import com.dingding.facde.activity.dto.ReceiveCouponDTO;
import com.dingding.facde.activity.dto.ShowUserCouponDTO;
import com.dingding.facde.activity.dto.ShowUserCouponListDTO;
import com.dingding.facde.activity.dto.UserCouponInfoDTO;

/**
 * 
 * @ClassName: IUserCouponDataService 
 * @Description: 用户优惠券数据服务
 * @author CHEHAUNBO 
 * @date 2016年2月19日 上午10:52:24
 * 
 */
public interface ICouponService {

	/**
	 * 
	 * @Title: getUserCouponList 
	 * @Description: 根据用户ID获取当前用户的所有优惠券 
	 * @param userId 用户优惠券ID
	 * @return List<ShowUserCouponDTO> 查询到的当前用户的优惠券集合
	 * @author CHEHAUNBO
	 * 
	 */
	public List<ShowUserCouponDTO> getUserCouponList(String userId);
	

	/**
	 * 
	 * @Title: getUserCoupons 
	 * @Description: 根据用户ID获取当前用户的所有优惠券 
	 * @param userId 用户优惠券ID
	 * @return List<ShowUserCouponListDTO> 查询到的当前用户的优惠券集合
	 * @author CHEHAUNBO
	 * 
	 */
	public List<ShowUserCouponListDTO> getUserCoupons(String userId);

	/**
	 * @Title: getUserCouponInfo 
	 * @Description: 根据用户ID获取优惠券详细信息
	 * 主要包括：规则、有效期、金额
	 * @param userCouponId 用户优惠券ID
	 * @return UserCouponInfoDTO 用户详情
	 * @author CHEHAUNBO
	 */
	public UserCouponInfoDTO getUserCouponInfo(String userCouponId);

	/**
	 * 
	 * @Title: activateCoupon 
	 * @Description: 激活优惠券
	 * @param userCouponId 用户优惠券主键ID
	 * @return boolean  true 激活成功  false 激活失败
	 * @author CHEHAUNBO
	 * 
	 */
	public boolean activateCoupon(String userCouponId);

	/**
	 * @Title: useCoupon
	 * @Description: 使用优惠券
	 * @param couponId 优惠券id
	 * @param userId 扫描人
	 * @author fengshuonan
	 * @return boolean true 使用成功 false 使用失败
	 * @throws
	 */
	public boolean useCoupon(String couponId,String userId);
	
	
	/**
	 * @Title: generateCoupon
	 * @Description:领取优惠券
	 * @param @param receive
	 * @author fengshuonan
	 * @return int
	 * @throws
	 */
	public int generateCoupon(ReceiveCouponDTO receive);
	
	
	/**
	 * @Title: activeCouponByTel
	 * @Description: 根据手机号和优惠券类型激活优惠券
	 * @param tellphone
	 * @author fengshuonan
	 * @return boolean
	 */
	public boolean activeCouponByTel(String tellphone);
	
	
	/**
	 * @Title: isExistUserByWeChatId
	 * @Description: 通过微信ID判断当前用户是否已经和手机号绑定
	 * @param phone 用户电话号码
	 * @param openId 用户微信ID
	 * @author fengshuonan
	 * @return boolean true 存在 false 失败
	 * @throws
	 */
	public boolean isExistUserByWeChatId(String phone,String openId);
	
	
	/**
	 * @Description: 判断是否存在openid
	 * @author fengshuonan
	 * @return boolean
	 */
	public boolean isExistOpenId(String openId);
	
	
	
	/**
	 * @Title: addAdvertiseClickNum
	 * @Description: 增加推广公司相应的统计次数
	 * @param asId 推广公司的id 
	 * @param type 统计操作的类型（1：点击  2：分享  3：注册）
	 * @author fengshuonan
	 * @throws
	 */
	public void addAdvertiseNum(String asId,int type);
	
	
	/**
	 * @Title: geCouponStoreDTOs 
	 * @Description: 根据城市名称获取门店信息
	 * @param cityName 城市名称
	 * @author YHQ
	 * @return List<CouponStoreDTO>
	 * @throws
	 */
	public List<CouponStoreDTO> geCouponStoreDTOs(String cityName);
	
	/**
	 * @Title: addUserCoupon 
	 * @Description: 用户添加优惠券
	 * @param cityName 电话号码
	 * @author 
	 * @return void
	 * @throws
	 */
	public void addUserCoupon(String telPhone);
	
	
	/**
	 * @Title: addUserCoupon 
	 * @Description: 用户添加优惠券
	 * @param userId 用户ID
	 * @author 
	 * @return void
	 * @throws
	 */
	public void addUserCouponInfo(String telPhone);
	
	/**
	 * 
	 * @Title: addUserCoupon
	 * @Description: 添加用户优惠券
	 * @param userId  用户Id
	 * @author cw
	 * 
	 */
	public void addUserCouponInfoUserId(String userId);
	
	/**
	 * 
	 * @Title: useCoupon 
	 * @Description: 使用优惠券(用户在搭车过程中的优惠券变化)
	 * @param ucid 用户优惠券Id
	 * @param type 优惠券状态
	 * @author YHQ 
	 * @return void    返回类型
	 * 
	 */
	public boolean useCoupon(String ucid,Integer type);
	
	
	/**
	 * @Description: 添加现金优惠券
	 * @param tellphone 电话号码
	 * @author fengshuonan
	 * @return void
	 */
	public void addMoneyCoupon(String tellphone);
	
	
	/**
	 * @Description:添加洗车券和现金券
	 * @param tellphone 电话号码
	 * @author fengshuonan
	 * @return void
	 */
	public void addCarWashCouponAndMoneyCoupon(String tellphone);

	
	/**
	 * @Description:获取推广号的id的所属区域信息
	 * @param promotionId
	 * @author fengshuonan
	 * @return District
	 */
	public District getDistrictByDistrictId(String promotionId);
	
	/**
	 * 
	 * @Title: getExpiredCouponNumber 
	 * @Description: 获取即将过期优惠券数量
	 * @param userId 用户Id
	 * @author YHQ 
	 * @since V2.6.3
	 * @return ExpiredCouponDTO    返回类型
	 * 
	 */
	public ExpiredCouponDTO getExpiredCouponNumber(String userId);
	
}
